package controller

import (
	"VideoManageSystem/internal/model"
	"VideoManageSystem/internal/service"

	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
)

// AddUser 添加用户        前端判断，只有管理员才能添加用户！！！！！
func AddUser(c *gin.Context) {
	// 构造请求体
	var userInput struct {
		Account    string `json:"account"`    // 账号
		Password   string `json:"password"`   // 密码
		Username   string `json:"username"`   // 姓名
		Gender     string `json:"gender"`     // 性别
		Phone      string `json:"phone"`      // 电话
		Department string `json:"department"` // 部门
		AddTime    string `json:"addTime"`    // 添加时间
		IsManager  bool   `json:"isManager"`  // 是否为管理员
	}

	// 解析请求体
	if err := c.ShouldBindJSON(&userInput); err != nil {
		c.JSON(400, gin.H{
			"code":    400,
			"message": "请求参数错误；错误：" + err.Error(),
		})
		return
	}

	// 检查数据库中是否已有该账号
	isAlreadyExists, err := service.CheckUserExist(userInput.Account)
	if err != nil {
		c.JSON(500, gin.H{
			"code":    500,
			"message": "服务器内部错误，无法添加账号，请稍后再试；错误：" + err.Error(),
		})
		return
	}
	if isAlreadyExists {
		c.JSON(403, gin.H{
			"code":    403,
			"message": "已添加过该账号",
		})
		return
	}

	// 加密密码
	hashedPassword, err := service.EncryptPassword(userInput.Password)
	if err != nil {
		c.JSON(500, gin.H{
			"code":    500,
			"message": "服务器内部错误，无法添加账号，请稍后再试；错误：" + err.Error(),
		})
		return
	}

	newUser := model.User{
		ID:         uuid.New().String(),
		Account:    userInput.Account,
		Username:   userInput.Username,
		Gender:     userInput.Gender,
		Phone:      userInput.Phone,
		AddTime:    userInput.AddTime,
		IsManager:  userInput.IsManager,
		Password:   string(hashedPassword),
		Department: userInput.Department,
	}
	if err := service.CreateNewUser(newUser); err != nil {
		c.JSON(500, gin.H{
			"code":    500,
			"message": "服务器内部错误，无法添加账号，请稍后再试；错误：" + err.Error(),
		})
		return
	}

	c.JSON(200, gin.H{
		"code":    200,
		"message": "添加用户成功",
	})
}
